Get rid of hardcoded pathes for stubdom and hotplug scripts
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 23 Jun 2009 16:25:51 +0000 (17:25 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 23 Jun 2009 16:25:51 +0000 (17:25 +0100)
- Have the buid system generate a file which exports the install paths
   for the hotplug scripts and stubdom / stubdom-dm
- Move file generation code from tools/python/Makefile into a gmake
   macro
  in Config.mk to avoid maintenance of three duplicates each with its
   own
  tweaks and bugs
- Export gmake variables into ioemu as shell variables
  for upcoming ioemu patches
- Do above as a gmake macro to avoid maintenance of several duplicates
- Adjust hotplug scripts to find the right xen binaries from the
  install directory
- Adjust stubdom-dm to use the install directories

Signed-off-by: Christoph Egger <Christoph.Egger@amd.com>
18 files changed:
Config.mk
stubdom/Makefile
stubdom/stubdom-dm
tools/Makefile
tools/hotplug/Linux/block
tools/hotplug/Linux/network-bridge
tools/hotplug/Linux/network-nat
tools/hotplug/Linux/network-route
tools/hotplug/Linux/vif-bridge
tools/hotplug/Linux/vif-nat
tools/hotplug/Linux/vif-route
tools/hotplug/Linux/xen-hotplug-cleanup
tools/hotplug/Linux/xen-hotplug-common.sh
tools/hotplug/NetBSD/block-nbsd
tools/hotplug/NetBSD/vif-bridge-nbsd
tools/hotplug/NetBSD/vif-ip-nbsd
tools/hotplug/common/Makefile
tools/python/Makefile

index 39e2511e444103ef503ce2c2d9a1eb39e350b125..62ea8395f90de17d57ce1d7c26f66846129820d0 100644 (file)
--- a/Config.mk
+++ b/Config.mk
@@ -87,6 +87,28 @@ define absolutify_xen_root
     export XEN_ROOT
 endef
 
+define buildmakevars2shellvars
+    PREFIX="$(PREFIX)";                                            \
+    XEN_SCRIPT_DIR="$(XEN_SCRIPT_DIR)";                            \
+    export PREFIX;                                                 \
+    export XEN_SCRIPT_DIR
+endef
+
+buildmakevars2file = $(eval $(call buildmakevars2file-closure,$(1)))
+define buildmakevars2file-closure
+    .PHONY: genpath
+    genpath:
+       rm -f $(1);                                                    \
+       echo "SBINDIR=\"$(SBINDIR)\"" >> $(1);                         \
+       echo "BINDIR=\"$(BINDIR)\"" >> $(1);                           \
+       echo "LIBEXEC=\"$(LIBEXEC)\"" >> $(1);                         \
+       echo "LIBDIR=\"$(LIBDIR)\"" >> $(1);                           \
+       echo "PRIVATE_BINDIR=\"$(PRIVATE_BINDIR)\"" >> $(1);           \
+       echo "XENFIRMWAREDIR=\"$(XENFIRMWAREDIR)\"" >> $(1);           \
+       echo "XEN_CONFIG_DIR=\"$(XEN_CONFIG_DIR)\"" >> $(1);           \
+       echo "XEN_SCRIPT_DIR=\"$(XEN_SCRIPT_DIR)\"" >> $(1)
+endef
+
 ifeq ($(debug),y)
 CFLAGS += -g
 endif
index cd7234980d27e537a963355ee6b5f3bbe576c125..cdedf8f2ca07108afd0f8f1313e756831c74be6e 100644 (file)
@@ -77,8 +77,12 @@ TARGET_LDFLAGS += -nostdlib -L$(CROSS_PREFIX)/$(GNU_TARGET_ARCH)-xen-elf/lib
 
 TARGETS=ioemu c caml grub
 
+STUBDOMPATH="stubdompath.sh"
+genpath-target = $(call buildmakevars2file,$(STUBDOMPATH))
+$(eval $(genpath-target))
+
 .PHONY: all
-all: build
+all: genpath build
 ifeq ($(STUBDOM_SUPPORTED),1)
 build: ioemu-stubdom c-stubdom pv-grub
 else
@@ -270,8 +274,7 @@ libxc-$(XEN_TARGET_ARCH)/libxenctrl.a libxc-$(XEN_TARGET_ARCH)/libxenguest.a:: c
 ioemu: cross-zlib cross-libpci libxc
        [ -f ioemu/config-host.mak ] || \
          ( $(absolutify_xen_root); \
-           PREFIX=$(PREFIX); \
-           export PREFIX; \
+           $(buildmakevars2shellvars); \
            cd ioemu ; \
            LWIPDIR=$(CURDIR)/lwip-$(XEN_TARGET_ARCH) \
            TARGET_CPPFLAGS="$(TARGET_CPPFLAGS)" \
@@ -374,6 +377,7 @@ clean:
        $(MAKE) -C caml clean
        $(MAKE) -C c clean
        rm -fr grub-$(XEN_TARGET_ARCH)
+       rm -f $(STUBDOMPATH)
        [ ! -d libxc-$(XEN_TARGET_ARCH) ] || $(MAKE) -C libxc-$(XEN_TARGET_ARCH) clean
        -[ ! -d ioemu ] || $(MAKE) -C ioemu clean
 
index 5161e1d0ee7b4dbef2060ba4b0d39c0a70a0bf48..76068a0bd0b2d680507250b36d936e5791b671f9 100644 (file)
@@ -5,6 +5,9 @@
 # dm script around stubdomains.
 #
 
+. ./stubdompath.sh
+stubdom_configdir="${XEN_CONFIG_DIR}/stubdoms"
+
 # To fit xterms nicely
 height=339
 
@@ -80,7 +83,7 @@ term() {
     (
        [ -n "$vncpid" ] && kill -9 $vncpid
        xm destroy $domname-dm
-        rm /etc/xen/stubdoms/$domname-dm
+        rm ${stubdom_configdir}/$domname-dm
     ) &
     # We need to exit immediately so as to let xend do the commands above
     exit 0
@@ -97,9 +100,9 @@ do
 done
 
 # Generate stubdom config file
-mkdir -p /etc/xen/stubdoms &>/dev/null
-echo "#This file is autogenerated, edit $domname instead!" > /etc/xen/stubdoms/$domname-dm
-echo "kernel = '/usr/lib/xen/boot/ioemu-stubdom.gz'" >> /etc/xen/stubdoms/$domname-dm
+mkdir -p ${stubdom_configdir} &>/dev/null
+echo "#This file is autogenerated, edit $domname instead!" > ${stubdom_configdir}/$domname-dm
+echo "kernel = '${XENFIRMWAREDIR}/ioemu-stubdom.gz'" >> ${stubdom_configdir}/$domname-dm
 
 vfb="sdl=$sdl, opengl=$opengl"
 test "$DISPLAY" && vfb="$vfb, display=$DISPLAY"
@@ -110,9 +113,9 @@ test "$vncpasswd" && vfb="$vfb, vncpasswd=$vncpasswd"
 test "$keymap" && vfb="$vfb, keymap=$keymap"
 test "$monitor" && vfb="$vfb, monitor=$monitor"
 test "$serial" && vfb="$vfb, serial=$serial"
-echo "vfb = ['$vfb']" >> /etc/xen/stubdoms/$domname-dm
+echo "vfb = ['$vfb']" >> ${stubdom_configdir}/$domname-dm
 
-echo -n "disk = [ " >> /etc/xen/stubdoms/$domname-dm
+echo -n "disk = [ " >> ${stubdom_configdir}/$domname-dm
 j=0
 for i in `xenstore-ls /local/domain/$domid/device/vbd | grep 'backend =' | awk '{print $3}'`
 do
@@ -126,13 +129,13 @@ do
     vbd_devtype=`xenstore-read $vbd_front/device-type`
     if [ $j -ne 0 ]
     then
-        echo -n "," >> /etc/xen/stubdoms/$domname-dm
+        echo -n "," >> ${stubdom_configdir}/$domname-dm
     fi
-    echo -n "'$vbd_type:$vbd_disk,$vbd_dev:$vbd_devtype,$vbd_mode'" >> /etc/xen/stubdoms/$domname-dm
+    echo -n "'$vbd_type:$vbd_disk,$vbd_dev:$vbd_devtype,$vbd_mode'" >> ${stubdom_configdir}/$domname-dm
     j=$(( $j + 1 ))
 done
-echo " ] " >> /etc/xen/stubdoms/$domname-dm
-echo -n "vif = [ " >> /etc/xen/stubdoms/$domname-dm
+echo " ] " >> ${stubdom_configdir}/$domname-dm
+echo -n "vif = [ " >> ${stubdom_configdir}/$domname-dm
 j=0
 for i in `xenstore-ls /local/domain/$domid/device/vif | grep 'backend =' | awk '{print $3}'`
 do
@@ -141,13 +144,13 @@ do
     vif_mac=`xenstore-read $i/mac`
     if [ $j -ne 0 ]
     then
-        echo -n "," >> /etc/xen/stubdoms/$domname-dm
+        echo -n "," >> ${stubdom_configdir}/$domname-dm
     fi
-    echo -n "'mac=$vif_mac'" >> /etc/xen/stubdoms/$domname-dm
+    echo -n "'mac=$vif_mac'" >> ${stubdom_configdir}/$domname-dm
     j=$(( $j + 1 ))
 done
-echo " ] " >> /etc/xen/stubdoms/$domname-dm
-creation="xm create -c /etc/xen/stubdoms/$domname-dm target=$domid memory=32 extra=\"$extra\""
+echo " ] " >> ${stubdom_configdir}/$domname-dm
+creation="xm create -c ${stubdom_configdir}/$domname-dm target=$domid memory=32 extra=\"$extra\""
 
 (while true ; do sleep 60 ; done) | /bin/sh -c "$creation" &
 #xterm -geometry +0+0 -e /bin/sh -c "$creation ; echo ; echo press ENTER to shut down ; read" &
index 0eebb00bd595db78f8da4a59e42a6b4a898d7c2b..89ee9710de566a6d12d824cac4dc0bb15e70f018 100644 (file)
@@ -97,10 +97,7 @@ ioemu-dir-find:
        fi
        set -e; \
                $(absolutify_xen_root); \
-               PREFIX=$(PREFIX); \
-               XEN_SCRIPT_DIR=$(XEN_SCRIPT_DIR); \
-               export PREFIX; \
-               export XEN_SCRIPT_DIR; \
+               $(buildmakevars2shellvars); \
                cd ioemu-dir; \
                ./xen-setup $(IOEMU_CONFIGURE_CROSS)
 
@@ -109,6 +106,7 @@ subdir-all-ioemu-dir subdir-install-ioemu-dir: ioemu-dir-find
 subdir-clean-ioemu-dir:
        set -e; if test -d ioemu-dir/.; then \
                $(absolutify_xen_root); \
+               $(buildmakevars2shellvars); \
                $(MAKE) -C ioemu-dir clean; \
        fi
 
index e042a7ef99c68159bda33806fe7db9eefea23fca..f50eeda56308e15df5c282583abd4f771079828a 100644 (file)
@@ -377,5 +377,5 @@ mount it read-write in a guest domain."
 esac
 
 # If we've reached here, $t is neither phy nor file, so fire a helper script.
-[ -x /etc/xen/scripts/block-"$t" ] && \
-  /etc/xen/scripts/block-"$t" "$command" $node
+[ -x ${XEN_SCRIPT_DIR}/block-"$t" ] && \
+  ${XEN_SCRIPT_DIR}/block-"$t" "$command" $node
index 95aaba0c150866dc54806d5047cb2caf78896f4f..676b6a62fde2e14857da0e9097dcec4a2802e998 100644 (file)
@@ -2,7 +2,7 @@
 #============================================================================
 # Default Xen network start/stop script.
 # Xend calls a network script when it starts.
-# The script name to use is defined in /etc/xen/xend-config.sxp
+# The script name to use is defined in ${XEN_CONFIG_DIR}/xend-config.sxp
 # in the network-script field.
 #
 # This script creates a bridge (default ${netdev}), adds a device
index aab793d93f29fbf0cc07ba1357a15237048f223c..10f8d283854d71fcb48d40fbbcb3984bc81d6f69 100644 (file)
@@ -2,7 +2,7 @@
 #============================================================================
 # Default Xen network start/stop script when using NAT.
 # Xend calls a network script when it starts.
-# The script name to use is defined in /etc/xen/xend-config.sxp
+# The script name to use is defined in ${XEN_CONFIG_DIR}/xend-config.sxp
 # in the network-script field.
 #
 # Usage:
@@ -18,6 +18,7 @@
 #============================================================================
 
 dir=$(dirname "$0")
+. "$dir/hotplugpath.sh"
 . "$dir/xen-script-common.sh"
 . "$dir/xen-network-common.sh"
 
index 574441e33484581e821678b5c11bc021ddee8fab..0cf85b526a6af366e2801ac77a45adf259f0a0b6 100644 (file)
@@ -2,7 +2,7 @@
 #============================================================================
 # Default Xen network start/stop script.
 # Xend calls a network script when it starts.
-# The script name to use is defined in /etc/xen/xend-config.sxp
+# The script name to use is defined in ${XEN_CONFIG_DIR}/xend-config.sxp
 # in the network-script field.
 #
 # Usage:
@@ -17,6 +17,7 @@
 #============================================================================
 
 dir=$(dirname "$0")
+. "$dir/hotplugpath.sh"
 . "$dir/xen-script-common.sh"
 
 evalVariables "$@"
index 1b698d703b4e8ed4bf4b88231fe05a03822c8be8..d35144e1e9fa1f9fa160f3b2102ce42fc3741c89 100644 (file)
@@ -1,12 +1,12 @@
 #!/bin/bash
 #============================================================================
-# /etc/xen/vif-bridge
+# ${XEN_SCRIPT_DIR}/vif-bridge
 #
 # Script for configuring a vif in bridged mode.
 # The hotplugging system will call this script if it is specified either in
 # the device configuration given to Xend, or the default Xend configuration
-# in /etc/xen/xend-config.sxp.  If the script is specified in neither of those
-# places, then this script is the default.
+# in ${XEN_CONFIG_DIR}/xend-config.sxp.  If the script is specified in
+# neither of those places, then this script is the default.
 #
 # Usage:
 # vif-bridge (add|remove|online|offline)
index 75bdf5c444365e287634ee7db8d306797595c9c2..74743ed7611b01c44bc3a2329a55221a8547e054 100644 (file)
@@ -1,12 +1,12 @@
 #!/bin/bash
 #============================================================================
-# /etc/xen/vif-nat
+# ${XEN_SCRIPT_DIR}/vif-nat
 #
 # Script for configuring a vif in routed-nat mode.
 # The hotplugging system will call this script if it is specified either in
 # the device configuration given to Xend, or the default Xend configuration
-# in /etc/xen/xend-config.sxp.  If the script is specified in neither of those
-# places, then vif-bridge is the default.
+# in ${XEN_CONFIG_DIR}/xend-config.sxp.  If the script is specified in
+# neither of those places, then vif-bridge is the default.
 #
 # Usage:
 # vif-nat (add|remove|online|offline)
index f5fd88ed5a8e203576adbda562b6c67b8cdb8b1a..0cacfcb99ec4a0a9304f669c4d7dfa81f0ff3547 100644 (file)
@@ -1,12 +1,12 @@
 #!/bin/bash
 #============================================================================
-# /etc/xen/vif-route
+# ${XEN_SCRIPT_DIR}/vif-route
 #
 # Script for configuring a vif in routed mode.
 # The hotplugging system will call this script if it is specified either in
 # the device configuration given to Xend, or the default Xend configuration
-# in /etc/xen/xend-config.sxp.  If the script is specified in neither of those
-# places, then vif-bridge is the default.
+# in ${XEN_CONFIG_DIR}/xend-config.sxp.  If the script is specified in
+# neither of those places, then vif-bridge is the default.
 #
 # Usage:
 # vif-route (add|remove|online|offline)
index 706359d03a3d6f6a81bbe1a51147534a19a973b9..0cb86d27ec44743efc00c5c9bda0ffab260b4886 100644 (file)
@@ -3,7 +3,7 @@
 dir=$(dirname "$0")
 . "$dir/xen-hotplug-common.sh"
 
-# Claim the lock protecting /etc/xen/scripts/block.  This stops a race whereby
+# Claim the lock protecting ${XEN_SCRIPT_DIR}/block.  This stops a race whereby
 # paths in the store would disappear underneath that script as it attempted to
 # read from the store checking for device sharing.
 # Any other scripts that do similar things will have to have their lock
index 980a62704e49acbaaf999c33285442618b6a5e54..d63b7660c6ade8e9298ee00d37a464f3285d30fd 100644 (file)
 
 
 dir=$(dirname "$0")
+. "$dir/hotplugpath.sh"
 . "$dir/logging.sh"
 . "$dir/xen-script-common.sh"
 . "$dir/locking.sh"
 
 exec 2>>/var/log/xen/xen-hotplug.log
 
-export PATH="/sbin:/bin:/usr/bin:/usr/sbin:$PATH"
+export PATH="${BINDIR}:${SBINDIR}:${LIBEXEC}:${PRIVATE_BINDIR}:/sbin:/bin:/usr/bin:/usr/sbin:$PATH"
 export LANG="POSIX"
 unset $(set | grep ^LC_ | cut -d= -f1)
 
index 915ddb755a4e62c878605251f2e6614d50d292ff..d853e115847f70f06c67e4219fff1124cb2116ee 100644 (file)
@@ -4,7 +4,10 @@
 # Called by xenbackendd
 # Usage: block xsdir_backend_path state
 
-PATH=/bin:/usr/bin:/sbin:/usr/sbin
+DIR=$(dirname "$0")
+. "${DIR}/hotplugpath.sh"
+
+PATH=${BINDIR}:${SBINDIR}:${LIBEXEC}:${PRIVATE_BINDIR}:/bin:/usr/bin:/sbin:/usr/sbin
 export PATH
 
 error() {
index bedb387953c8476ac18497565d7c94c94d60b268..ecfef15012597a94b22752455ed447f1d4a5fd57 100644 (file)
@@ -4,7 +4,10 @@
 # Called by xenbackendd
 # Usage: vif-bridge xsdir_backend_path state
 
-PATH=/bin:/usr/bin:/sbin:/usr/sbin
+DIR=$(dirname "$0")
+. "${DIR}/hotplugpath.sh"
+
+PATH=${BINDIR}:${SBINDIR}:${LIBEXEC}:${PRIVATE_BINDIR}:/bin:/usr/bin:/sbin:/usr/sbin
 export PATH
 
 xpath=$1
index d8b5bb97598d391e4110a9620afa4ea60f47b1dd..ca4fd605806f4c7e271e7eb2ac68ab6e811413b3 100644 (file)
@@ -4,7 +4,10 @@
 # Called by xenbackendd
 # Usage: vif-ip xsdir_backend_path state
 
-PATH=/bin:/usr/bin:/sbin:/usr/sbin
+DIR=$(dirname "$0")
+. "${DIR}/hotplugpath.sh"
+
+PATH=${BINDIR}:${SBINDIR}:${LIBEXEC}:${PRIVATE_BINDIR}:/bin:/usr/bin:/sbin:/usr/sbin
 export PATH
 
 xpath=$1
index a6e731c1cafd362e3e8687c2f7349209a595da19..b95bf4ee8b1caf45e39c51d869157fe1d4991cc9 100644 (file)
@@ -1,17 +1,22 @@
-XEN_ROOT = ../../../
+XEN_ROOT = ../../..
 include $(XEN_ROOT)/tools/Rules.mk
 
+HOTPLUGPATH="hotplugpath.sh"
+
 # OS-independent hotplug scripts go in this directory
 
-# Xen script dir and scripts to go there.
-XEN_SCRIPTS =
+# Xen scripts to go there.
+XEN_SCRIPTS = $(HOTPLUGPATH)
 XEN_SCRIPT_DATA =
 
+genpath-target = $(call buildmakevars2file,$(HOTPLUGPATH))
+$(eval $(genpath-target))
+
 .PHONY: all
-all:
+all: build
 
 .PHONY: build
-build:
+build: genpath
 
 .PHONY: install
 install: all install-scripts
@@ -31,3 +36,4 @@ install-scripts:
 
 .PHONY: clean
 clean:
+       rm -f $(HOTPLUGPATH)
index 67edb46306f31cfea02c33fd4dfb5c2ce288bb53..6fa4d5b00e02a9d3da7087bb851bc9e090db57fa 100644 (file)
@@ -14,20 +14,11 @@ I18NSRCFILES = $(shell find xen/xm/ -name '*.py')
 CATALOGS = $(patsubst %,xen/xm/messages/%.mo,$(LINGUAS))
 NLSDIR = $(SHAREDIR)/locale
 XENPATH = "xen/util/path.py"
-  
-.PHONY: build buildpy genpath
-genpath:
-       rm -f $(XENPATH)
-       echo "SBINDIR=\"$(SBINDIR)\"" >> $(XENPATH)
-       echo "BINDIR=\"$(BINDIR)\"" >> $(XENPATH)
-       echo "LIBEXEC=\"$(LIBEXEC)\"" >> $(XENPATH)
-       echo "LIBDIR=\"$(LIBDIR)\"" >> $(XENPATH)
-       echo "SHAREDIR=\"$(SHAREDIR)\"" >> $(XENPATH)
-       echo "PRIVATE_BINDIR=\"$(PRIVATE_BINDIR)\"" >> $(XENPATH)
-       echo "XENFIRMWAREDIR=\"$(XENFIRMWAREDIR)\"" >> $(XENPATH)
-       echo "XEN_CONFIG_DIR=\"$(XEN_CONFIG_DIR)\"" >> $(XENPATH)
-       echo "XEN_SCRIPT_DIR=\"$(XEN_SCRIPT_DIR)\"" >> $(XENPATH)
 
+genpath-target = $(call buildmakevars2file,$(XENPATH))
+$(eval $(genpath-target))
+
+.PHONY: build buildpy
 buildpy: genpath 
        CC="$(CC)" CFLAGS="$(CFLAGS)" $(PYTHON) setup.py build